// 模块化,vue初始化文件
/**
 * 原型(原型对象)
 * 每一个对象（函数也是对象）都有一个特殊的属性叫做原型（prototype），
 * 它指向另一个对象，这个对象被称为原型对象，
 * 原型对象是用来共享属性和方法的
 */
// 在vue原型上挂载实例化方法
import { compileToFunction } from "./compile/index"
import { initState } from "./initState"
export function initMixin(Vue) {
  Vue.prototype._init = function (options) {
    let vm = this
    vm.$options = options
    // 初始化状态
    initState(vm)
    // 渲染模版
    if (vm.$options.el) {
      //判断el是否存在
      vm.$mount(vm.$options.el) //调用挂载方法
    }
  }
  Vue.prototype.$mount = function (el) {
    let vm = this
    el = document.querySelector(el)
    let options = vm.$options
    if (!options.render) {
      //判断是否有render函数
      let template = options.template

      // 判断实例上是否有template
      if (!template && el) {
        // 获取html
        el = el.outerHTML
        // <div id="app">hello{{message}}</div>
        // 将html转化成ast语法树
        /**
         * tag:标签 'div'
         * attrs:属性 [{id:'app'}]
         * children:子节点 [{tag:null,text:hello}]
         *
         */
        // 将ast转换成html语法树
        let ast = compileToFunction(el)
      }
    }
  }
}
